﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

//给定一个小于100的整数算他们的乘积
//int main()
//{
//	int a, b, c;
//	scanf("%d %d %d",&a,&b,&c);
//	printf("%d", a * b * c);
//
//
//
//
//	return 0;
//}

//矩形的面积和周长
//int main()
//{
//	double a, b;
//	scanf("%lf%lf", &a, &b);
//	printf("%.2lf\n", 2 * (a + b));
//	printf("%.2lf", a * b);
//
//
//
//
//	return 0;
//}

//三位数分别输出百位十位个位
//int main()
//{
//	int a=0;
//	scanf("%d", &a);
//	printf("%d\n%d\n%d\n", a /100, a/10%10,a%10);
//	
//
//	return 0;
//}


//int main()
//{
//
//	//另一种方法
//	char s[100];
//	scanf("%s", s);
//	printf("%c\n%c\n%c\n", s[0], s[1], s[2]);
//
//	return 0;
//}


//交换两位数
//int main()
//{
//	char s[100];
//	scanf("%s",s);
//	printf("%c%c", s[1], s[0]);
//
//	return 0;
//}

//求和公式
//int main()
//{
//	long long n;
//	scanf("%lld", &n);
//	printf("%lld", (n * (n + 1)) / 2);
//
//	return 0;
//}

//每一位求和
//int main()
//{
//	char arr[100] = {'0'};
//	
//	scanf("%s", arr);
//	printf("%d", (arr[0] - '0') + (arr[1] - '0') + (arr[2] - '0') +( arr[3] - '0'));
//
//
//
//	return 0;
//}
//int main()
//{
//	char s[100];
//	scanf("%s", s);
//	int a = 0, b = 0, c = 0, d = 0;
//	sscanf(s, "%1d%1d%1d%1d", &a, &b, &c, &d);
//	printf("%d", a+ b+ c+ d);
//
//
//	return 0;
//}




//已知注水管 A 单独注满一池水需要 a 小时，注水管 B 单独注满一池水需要 b 小时，排水管 C 将一池水排净需要 c 小时。初始时水池中没有水，同时打开注水管 A 和 B。t 小时后，再打开排水管 C，问水池注满一共需要多少小时？
//
//​ 保证打开水管 C 时水池还没有满，且保证水池最终可以注满。
//
//输入
//​ 输入四个整数 a, b, c, t （1≤a, b, c, t≤50）
//
//输出
//​ 输出一个浮点数，表示水池注满一共需要多少小时（包括一开始的 t 小时）。
//
//​ 结果保留两位小数。

int main()
{
	double a, b, c, t;
	scanf("%lf %lf %lf %lf", &a, &b, &c, &t);
	printf("%.2lf", ((1 - t / a - t / b)  / (1 / a + 1 / b - 1 / c))+t);
	return 0;
}